The flow of data in a computer system is a complex process which requires data management. For example, a computer network comprising a plurality of computer devices will have to deal with a large number of data transfer operations over a given period of time. Taking the specific example of a computer network comprising a plurality of computer systems and a plurality of print devices (often referred to as “printers”), each computer system will usually send a large number of “print jobs” over the network to one or more of the print devices.
Data flow management may have to take account of scheduled data transfer operations. Taking the above example of the computer network having a plurality of print devices, it is common in business and commercial environments for print jobs to be sent to one or more print devices in accordance with a time-based schedule. For example, a customer may specify that a print job should be completed, at the latest, by a particular time on a particular date. Accordingly, the print job will be incorporated in a schedule of print jobs, the data flow management method aiming to ensure that each print job will be processed before, or generally about, the time specified by the customer. Conventionally, scheduling management methods are either performed manually, or utilise traditional job-shop scheduling algorithms, such as “greedy scheduling”, “simulated annealing” and so on. Such conventional methods are over-simplistic, usually inaccurate (in the case of manual scheduling, a human will not be able to schedule complex jobs over an extended period), and do not cater for complex “what if scenarios”, for example, “what if a new event occurs on the system, such as a hardware failure?”